define(['element'], function(element) {
    var uitab = 'ui-tabs';
    var Tabs = function(el, options) { this.defaults = { title: '新选项卡', content: '', isclose: true };
        this.$options = $.extend(this.defaults, options);
        this.$el = $(el); }
    Tabs.prototype.init = function() {
        var ui = this.$el;
        var options = this.$options;
        var index = '';
        ui.attr({ 'data-id': random(100001, 999999999), });
        ui.find('.tabs-nav-item [data-tab]').each(function(index, el) { $(el).attr({ 'data-index': index }) });
        if (!ui.find('.dropdown.active').find('.dropdown-toggle').hasClass('tab-toggle')) { ui.find('.dropdown.active').find('.dropdown-toggle').addClass('tab-toggle'); }
        index = ui.find('.tabs-nav-item.active').find('[data-tab]').eq(0).attr('data-index');
        if (index != '') { _switch(ui, index); }
        _tabsresize(ui);
        _winresize(ui);
        uiClickEvent(ui);
    }
    Tabs.prototype.add = function(options) {
        var ui = this.$el,
            id = random(),
            eindex = '';
        options = $.extend(this.defaults, options);
        options.title = typeof(options.title) == 'undefined' || options.title == '' ? '新选项卡' : options.title;
        options.content = typeof(options.content) == 'undefined' ? '' : options.content;
        ui.find('.nav').append('<li class="tabs-nav-item"><a href="javascript:;" class="tab-toggle" data-tab="tab' + id + '">' + options.title + '</a></li>');
        if (options.isclose == true) { ui.find('.nav').find('.tabs-nav-item').append('<a href="javascript:;" class="btn-close" aria-hidden="true">×</a>'); }
        ui.find('.tab-content').append('<div class="tab-pane" data-tab="tab' + id + '">' + options.content + '</div>');
        ui.find('.tabs-nav-item [data-tab]').each(function(index, el) { eindex = index;
            $(el).attr({ 'data-index': index }) });
        ui.trigger("tab.insert", { index: eindex, ul: ui });
        _tabsresize(ui);
        uiClickEvent(ui);
    }
    Tabs.prototype.del = function(index) {
        var ui = this.$el;
        var tabid = ui.find('.nav').find('.tabs-nav-item').find('[data-index="' + index + '"]').attr('data-tab');
        ui.find('.nav').find('.tabs-nav-item').find('[data-index="' + index + '"]').parent('.tabs-nav-item').remove();
        ui.find('.tab-content').find('.tab-pane[data-tab="' + tabid + '"]').remove();
        ui.find('.input-group-btn.dropdown .dropdown-menu [data-tab="' + tabid + '"]').remove();
        _tabsresize(ui);
        if (ui.find('.tabs-nav-item.active').size() < 1) { _switch(ui, ui.find('.tabs-nav-item [data-tab]').eq(0).attr('data-index')); }
        if (ui.find('.tabs-nav-item').size() < 1) { ui.remove(); }
        ui.trigger("tab.close", { index: index, ul: ui });
    }
    Tabs.prototype.hide = function(index) {
        var ui = this.$el;
        var tabs = ui.find('.nav').find('.tabs-nav-item [data-index="' + index + '"]');
        tabs.parent('.tabs-nav-item').hide();
        tabs.parent().parent('.dropdown-menu').parent('.dropdown').hide();
        if (tabs.parent().parent('.dropdown-menu').parent('.dropdown').hasClass('active') || tabs.parent('.tabs-nav-item').hasClass('active')) { _switch(ui, ui.find('.tabs-nav-item [data-tab]').eq(0).attr('data-index')); }
        _tabsresize(ui);
        ui.trigger("tab.hide", { index: index, ul: ui });
    }
    Tabs.prototype.reset = function() { return $('.' + uitab).tabs(); }
    Tabs.prototype.show = function(index) { var ui = this.$el; var tabs = ui.find('.nav').find('.tabs-nav-item [data-index="' + index + '"]');
        tabs.parent('.tabs-nav-item').show();
        tabs.parent().parent('.dropdown-menu').parent('.dropdown').show();
        _tabsresize(ui);
        ui.trigger("tab.show", { index: index, ul: ui }); }
    Tabs.prototype.switch = function(index) { return _switch(this.$el, index); }
    Tabs.VERSION = '1.0.0';
    var uiClickEvent = function(ui) {
        ui.find('.tabs-nav-item').find('.tab-toggle').off().click(function(event) { _switch(ui, $(this).attr('data-index')); });
        ui.find('.tabs-nav-item').find('.btn-close').off().click(function(event) {
            var tabsid = '';
            var tabs = $(this).parent('.tabs-nav-item');
            if (tabs.find('.dropdown-menu').size() > 0) { tabs.find('.dropdown-menu').find('li').each(function(index, el) { tabsid = $(el).find('a').attr('data-tab');
                    ui.find('.tab-content').find('.tab-pane[data-tab="' + tabsid + '"]').remove(); if (typeof(tabsid) != 'undefined') { ui.trigger("tab.close", { index: $(el).find('a').attr('data-index'), ul: ui }); } }); } else { tabsid = tabs.find('.tab-toggle').attr('data-tab');
                ui.find('.tab-content').find('.tab-pane[data-tab="' + tabsid + '"]').remove(); if (typeof(tabsid) != 'undefined') { ui.trigger("tab.close", { index: tabs.find('.tab-toggle').attr('data-index'), ul: ui }); } }
            $(this).parent('.tabs-nav-item').remove();
            if (ui.find('.tabs-nav-item.active').size() < 1) { _switch(ui, ui.find('.tabs-nav-item [data-tab]').eq(0).attr('data-index')); }
            if (ui.find('.tabs-nav-item').size() < 1) { ui.remove(); }
            _tabsresize(ui);
        });
        ui.find('.tabs-nav-item').find('.dropdown-menu li a').off().click(function(event) { _switch(ui, $(this).attr('data-index')); });
    }
    var _tabsresize = function(ui) {
        var control = 0,
            liWidth = 0,
            tabid = '',
            index = '',
            title = '';
        if (ui.find('.nav.nav-tabs-align').size() > 0) { ui.find('.nav.nav-tabs-align').find('.tabs-nav-item').css({ 'width': '100%', 'max-width': ui.width() / ui.find('.nav.nav-tabs-align').find('.tabs-nav-item:visible').size() });
            ui.find('.nav.nav-tabs-align').find('.tabs-nav-item').last().width(ui.find('.nav.nav-tabs-align').find('.tabs-nav-item:visible').last().outerWidth(true) - 11); }
        if (ui.hasClass('ui-tab-card')) {
            control = ui.find('.ui-page-tabs').find('.form-control').outerWidth(true);
            ui.find('.ui-page-tabs').find('.form-control').find('.nav').find('.tabs-nav-item').each(function(index, el) {
                liWidth += $(el).outerWidth(true);
                if (liWidth > control) {
                    tabid = $(el).find('.tab-toggle').attr('data-tab');
                    index = $(el).find('.tab-toggle').attr('data-index');
                    title = $(el).find('.tab-toggle').text();
                    if (ui.find('.ui-page-tabs').find('.input-group-btn.dropdown .dropdown-menu [data-index="' + index + '"]').size() < 1) { if (typeof(tabid) != 'undefined' && typeof(index) != 'undefined' && typeof(title) != 'undefined') { ui.find('.ui-page-tabs').find('.input-group-btn.dropdown .dropdown-menu').append('<li class="tabs-nav-item"><a href="javascript:;" class="tab-toggle" data-tab="' + tabid + '" data-index="' + index + '">' + title + '</a></li>'); } }
                    if ($(el).hasClass('dropdown')) { $(el).find('.dropdown-menu li').each(function(index2, el2) { tabid = $(el2).find('[data-tab]').attr('data-tab');
                            index = $(el2).find('[data-tab]').attr('data-index');
                            title = $(el2).find('[data-tab]').text(); if (ui.find('.ui-page-tabs').find('.input-group-btn .dropdown-menu [data-tab="' + tabid + '"]').size() < 1) { if (typeof(tabid) != 'undefined' && typeof(index) != 'undefined' && typeof(title) != 'undefined') { ui.find('.ui-page-tabs').find('.input-group-btn .dropdown-menu').append('<li class="tabs-nav-item"><a href="javascript:;" class="tab-toggle" data-tab="' + tabid + '" data-index="' + index + '">' + title + '</a></li>'); } } }); }
                    $(el).hide();
                } else { tabid = $(el).find('.tab-toggle').attr('data-tab');
                    ui.find('.ui-page-tabs').find('.input-group-btn.dropdown .dropdown-menu [data-tab="' + tabid + '"]').remove();
                    $(el).find('.dropdown-menu li').each(function(index2, el2) { tabid = $(el2).find('[data-tab]').attr('data-tab');
                        ui.find('.ui-page-tabs').find('.input-group-btn.dropdown .dropdown-menu [data-tab="' + tabid + '"]').remove(); });
                    $(el).show(); }
            });
            uiClickEvent(ui);
        }
        ui.find('.ui-page-tabs').find('.input-group-btn.dropdown .dropdown-menu li:empty').remove();
        liWidth = 0;
    }
    var _winresize = function(ui) { $(window).resize(function() { _tabsresize(ui); }); }
    var _switch = function(ui, index) {
        if (typeof(index) == 'string' && index != '' || typeof(index) == 'number' && index != '') {
            var tabid = ui.find('.nav').find('.tabs-nav-item [data-index="' + index + '"]').attr('data-tab');
            var navel = ui.find('.nav').find('.tabs-nav-item [data-index="' + index + '"]');
            ui.find('.nav').find('.tabs-nav-item').removeClass('active');
            ui.find('.tab-content').find('.tab-pane').removeClass('active');
            if (navel.parent('.tabs-nav-item').size() > 0) { navel.parent('.tabs-nav-item').addClass('active'); } else { navel.parent('li').parent('.dropdown-menu').parent('.tabs-nav-item').addClass('active'); }
            ui.find('.tab-content').find('.tab-pane[data-tab="' + tabid + '"]').addClass('active');
            ui.trigger("tab.switch", { index: index, ul: ui });
            return true;
        }
        return false;
    }
    var random = function(min, max) { if (typeof(min) != 'number') min = 1001; if (typeof(max) != 'number') max = 9999;
        parseInt(Math.random() * (max - min + 1) + min, 10); return Math.floor(Math.random() * (max - min + 1) + min); }
    $.fn.tabs = function(options) { var tab = {};
        this.each(function(index) { tab[index] = new Tabs(this, options);
            tab[index].init(); }); return tab; }
    $.fn.tabsReset = function(options) { return $('.' + uitab).tabs(); }    
    return $('.' + uitab).tabs();
});